package br.com.itc.componentes.input
{
	import br.com.itc.componentes.validacao.IValidavel;
	
	import com.flexpernambuco.controls.MasterTextInput;
	
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	
	import mx.events.FlexEvent;
	import mx.validators.Validator;

	[Event(name="inputMaskEnd")]
	public class Mascara extends MasterTextInput implements IValidavel
	{
		private var _campoObrigatorio: Boolean = false;
		private var _descricaoErro: String = "Campo Obrigatório!";
		private var validador: Validator = new Validator;
		
		public function Mascara()
		{
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
		}
		
		public function get campoObrigatorio(): Boolean {
			return _campoObrigatorio;
		}
		
		public function set campoObrigatorio(isObrigatorio: Boolean): void {
			this._campoObrigatorio = isObrigatorio;
			adicionaObrigatoriedade();
		}
		
		public function get descricaoErro(): String {
			return _descricaoErro;
		}
		
		public function set descricaoErro(descricaoErro: String): void {
			this._descricaoErro = descricaoErro;
		}
		
		private function init(event: FlexEvent): void {
			adicionaObrigatoriedade();	
		}

		private function adicionaObrigatoriedade(): void {
			if(_campoObrigatorio) {
				this.addEventListener(KeyboardEvent.KEY_UP, validar);
				validador.source = this;
				validador.property = "actualText";
				validador.required = true;
				validador.requiredFieldError = _descricaoErro;
				validar(null);
			} else {
				this.removeEventListener(KeyboardEvent.KEY_UP, validar);
				validador.source = this;
				validador.property = "actualText";
				validador.required = false;
				validador.requiredFieldError = _descricaoErro;
				validar(null);
			}
		}
		
		public function validar(evt: Event = null): void {
			dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
			resourceManager.update();
		}
		
		public function isValido(): Boolean {
			var valido: Boolean = true;
			if (_campoObrigatorio && actualText == "") {
				valido = false;
			}
			return valido;
		}
		
	}
}